home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / C Internet Config / IC Application Source ƒ / C Source ƒ / RequiredEventSupport.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-30  |  4.0 KB  |  154 lines  |  [TEXT/SPM ]

  1. /*
  2.     RequiredEventSupport.c
  3.     
  4. */
  5.  
  6. #include <AppleEvents.h>
  7.  
  8. #include "RequiredEventSupport.h"
  9.  
  10. /* Local Prototypes */
  11. pascal OSErr HandleOAPP(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP openapp);
  12. pascal OSErr HandleODOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP opendoc);
  13. pascal OSErr HandlePDOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP printdoc);
  14. pascal OSErr HandleQUIT(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP quitapp);
  15.  
  16. OSErr GotRequiredParams(AppleEvent* theAppleEvent){
  17.     DescType typeCode;
  18.     Size actualSize;
  19.     OSErr err;
  20.     
  21.     err=AEGetAttributePtr(theAppleEvent,keyMissedKeywordAttr,typeWildCard,&typeCode,(Ptr)0,0,&actualSize);
  22.     // null ptr ok; we don't need the data, just AEGetAttributePtr's result
  23.     
  24.     if (err==errAEDescNotFound)
  25.         err=noErr;
  26.     else if (err==noErr)
  27.         err=errAEEventNotHandled;
  28.     
  29.     return err;
  30. }
  31.  
  32. pascal OSErr HandleOAPP(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP openapp){
  33.     OSErr err=errAEEventNotHandled;
  34.     
  35.     GotRequiredParams(theAppleEvent);
  36.     
  37.     if (openapp!=(ApplicationUPP)0)
  38.         err=CallApplicationProc(openapp);
  39.     
  40.     return err;
  41. }
  42.  
  43. pascal OSErr HandleODOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP opendoc){
  44.     FSSpec myFSS;
  45.     AEDescList docList;
  46.     long index,itemsInList;
  47.     Size actualSize;
  48.     AEKeyword keywd;
  49.     DescType typeCode;
  50.     OSErr oe,ooe;
  51.     
  52.     if (opendoc==(DocumentUPP)0)
  53.         return errAEEventNotHandled;
  54.     
  55.     oe=AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  56.     if (oe==noErr){
  57.         GotRequiredParams(theAppleEvent);
  58.         // now get each alias from the list (as an FSSpec) and open the associated file
  59.         oe=AECountItems(&docList,&itemsInList);
  60.         for (index=1;index<=itemsInList;index++){
  61.             ooe=AEGetNthPtr(&docList,index,typeFSS,&keywd,&typeCode,&myFSS,sizeof(FSSpec),&actualSize);
  62.             // coercion does alias->fsspec
  63.             if (ooe==noErr)
  64.                 CallDocumentProc(opendoc,&myFSS);
  65.         }
  66.         AEDisposeDesc(&docList);
  67.     }
  68.     
  69.     return oe;
  70. }
  71.  
  72. pascal OSErr HandlePDOC(AppleEvent* theAppleEvent,AppleEvent* reply,DocumentUPP printdoc){
  73.     FSSpec myFSS;
  74.     AEDescList docList;
  75.     long index,itemsInList;
  76.     Size actualSize;
  77.     AEKeyword keywd;
  78.     DescType typeCode;
  79.     OSErr oe,ooe;
  80.     
  81.     if (printdoc==(DocumentUPP)0)
  82.         return errAEEventNotHandled;
  83.     
  84.     oe=AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  85.     if (oe==noErr){
  86.         GotRequiredParams(theAppleEvent);
  87.         // now get each alias from the list (as an FSSpec) and open the associated file
  88.         oe=AECountItems(&docList,&itemsInList);
  89.         for (index=1;index<=itemsInList;index++){
  90.             ooe=AEGetNthPtr(&docList,index,typeFSS,&keywd,&typeCode,&myFSS,sizeof(FSSpec),&actualSize);
  91.             // coercion does alias->fsspec
  92.             if (ooe==noErr)
  93.                 CallDocumentProc(printdoc,&myFSS);
  94.         }
  95.         AEDisposeDesc(&docList);
  96.     }
  97.     
  98.     return oe;
  99. }
  100.  
  101. pascal OSErr HandleQUIT(AppleEvent* theAppleEvent,AppleEvent* reply,ApplicationUPP quitapp){
  102.     OSErr oe;
  103.     Str255 errStr="\puser canceled quit";
  104.     Str255 okStr="\pOK";
  105.     StringPtr sp;
  106.     
  107.     if (quitapp==(ApplicationUPP)0)
  108.         return errAEEventNotHandled;
  109.     
  110.     GotRequiredParams(theAppleEvent);
  111.     
  112.     oe=CallApplicationProc(quitapp);
  113.     
  114.     if (reply->dataHandle!=(Handle)0){
  115.         if (oe==noErr)
  116.             sp=okStr;
  117.         else
  118.             sp=errStr;
  119.         
  120.         oe=AEPutParamPtr(reply,keyErrorString,typeChar,(Ptr)&(sp[1]),sp[0]);
  121.     }
  122.     
  123.     return oe;
  124. }
  125.  
  126. AEEventHandlerUPP _gOAppUPP,_gODocUPP,_gPDocUPP,_gQuitUPP;
  127.  
  128. OSErr InitAppleEvents(ApplicationUPP openapp,DocumentUPP opendoc,DocumentUPP printdoc,ApplicationUPP quitapp){
  129.     OSErr aevtErr;
  130.     
  131.     _gOAppUPP=NewAEEventHandlerProc(HandleOAPP);
  132.     _gODocUPP=NewAEEventHandlerProc(HandleODOC);
  133.     _gPDocUPP=NewAEEventHandlerProc(HandlePDOC);
  134.     _gQuitUPP=NewAEEventHandlerProc(HandleQUIT);
  135.     
  136.     aevtErr=AEInstallEventHandler(kCoreEventClass,kAEOpenApplication,_gOAppUPP,(long)openapp,false);
  137.     
  138.     if (aevtErr==noErr)
  139.         aevtErr=AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments,_gODocUPP,(long)opendoc,false);
  140.     
  141.     if (aevtErr==noErr)
  142.         aevtErr=AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments,_gPDocUPP,(long)printdoc,false);
  143.     
  144.     if (aevtErr==noErr)
  145.         aevtErr=AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,_gQuitUPP,(long)quitapp,false);
  146.     
  147.     return aevtErr;
  148. }
  149.  
  150.  
  151.  
  152.  
  153.  
  154.